
var store_usuario;
var store_funcionalidades;
var store_editor;

Ext.onReady(function()
{
    store_usuario = new X.store.Json({
        fields : [
            'codigoUsuario',
            'nombreUsuario'
        ]
    });
    
    store_funcionalidades = new X.store.Json({
        fields : [
            'codigoFuncionalidad',
            'nombreFuncionalidad'
        ]
    });

    store_editor = new X.store.Json({
        url    : '/log/ajax-filtro',
        fields : [
            'codigoLog',
            'fechaHora',
            'nombreFuncionalidad',
            'nombreUsuario',
            'descripcion'
        ]
    });

    var grid = new X.grid.GridPanel({

        id        : 'grid',
        height    : 200,
        width     : 665,
        store     : store_editor,
        useBbar   : false,
        columns:[
            new Ext.grid.RowNumberer(),
            new X.column.Text     ({header: 'Usuario',       dataIndex: 'nombreUsuario',       width: 130}),
            new X.column.DateTime ({header: 'FechaHora',     dataIndex: 'fechaHora',           width: 130}),
            new X.column.Text     ({header: 'Funcionalidad', dataIndex: 'nombreFuncionalidad', width: 180}),
            new X.column.Text     ({header: 'Descripcion',   dataIndex: 'descripcion',         width: 180})
        ]
    });

    var form = new X.form.FormPanel2({

        title            : 'Reporte de Auditoría',
        submitButtonText : 'Crear',
        returnButtonText : 'Cancelar',
        submitUrl        : '/log/ajax-crear',
        returnUrl        : '/log/pdf',
        width            : 730,
        height           : 510,
        labelWidth       : 90,
        layout           : 'absolute',        
        items:[
            new Ext.form.FieldSet({title:'Parametros de filtrado', x: 10, y: 5, width: 370, height: 180, layout:'absolute', items:
            [
                {layout:'form', x: 10, y: 5, items:[
                    new X.field.Hidden({                         id:'gridRows'             }),
                    new X.field.Combo ({
                        id           : 'filtroUsuario',
                        hiddenName   : 'codigoUsuario',
                        fieldLabel   : 'Usuario',
                        valueField   : 'codigoUsuario',
                        displayField : 'nombreUsuario',
                        allowBlank   : true,
                        width        : 230,
                        store        : store_usuario
                    }),
                    new X.field.Combo ({
                        id           : 'filtroFuncionalidades',
                        hiddenName   : 'codigoFuncionalidad',
                        fieldLabel   : 'Funcionalidad',
                        valueField   : 'codigoFuncionalidad',
                        displayField : 'nombreFuncionalidad',
                        allowBlank   : true,
                        width        : 230,
                        store        : store_funcionalidades
                    }),
                    new X.field.Date ({fieldLabel:'Fecha Inicial', id:'filtroInicial', width:230, allowBlank: true, vtype: 'daterange',   endDateField:'filtroFinal'}),
                    new X.field.Date ({fieldLabel:'Fecha Final',   id:'filtroFinal',   width:230, allowBlank: true, vtype: 'daterange', startDateField:'filtroInicial'})
                ]},
                {layout:'form', x: 105, y: 120, items:[
                    new Ext.Button   ({text:'Buscar', width:230, handler:cargar_grilla})
                ]}
            ]}),
            new Ext.form.FieldSet({title:'Log de Actividades', x: 10, y: 200,items:
            [
                grid
            ]})
        ]
    });
    
    // ajax para cargar los datos filtrador    
    function cargar_grilla(){
        store_editor.setBaseParam('filtroUsuario',          Ext.getCmp('filtroUsuario')         .getValue());
        store_editor.setBaseParam('filtroFuncionalidades',  Ext.getCmp('filtroFuncionalidades') .getValue());
        store_editor.setBaseParam('filtroInicial',          Ext.getCmp('filtroInicial')         .getValue());
        store_editor.setBaseParam('filtroFinal',            Ext.getCmp('filtroFinal')           .getValue());
        store_editor.reload(); 
    }

    // validacion de filtroInicial y filtroFinal    
    Ext.apply(Ext.form.VTypes, {
        daterangeText : 'Formato incorrecto',
        daterange     : function(val, field) {
            var date = field.parseDate(val);

            if(!date){
                return false;
            }
            if (field.startDateField) {
                var start = Ext.getCmp(field.startDateField);
                if (!start.maxValue || (date.getTime() != start.maxValue.getTime())) {
                    start.setMaxValue(date);
                    start.validate();
                }
            }
            else if (field.endDateField) {
                var end = Ext.getCmp(field.endDateField);
                if (!end.minValue || (date.getTime() != end.minValue.getTime())) {
                    end.setMinValue(date);
                    end.validate();
                }
            }
            return true;
        }
    });

    form.getForm().addListener('beforeaction', function(form, action){
        if (store_editor.getCount() <= 0){
            X.msg.Failure('Debe haber al menos un registro'); return false;
        }
        return true;
    });

});
